DNS服务器(四):DNS视图及bind中rndc的使用

一、DNS服务器视图功能的实现

        DNS服务器有一个高级的功能,能够实现不同的用户访问同一个域名,把域名解析成不同的IP地址,使用户能够访问离他最近的服务器上的数据,这就是DNS服务器的视图功能。使用DNS服务器的视图功能可以增加网站的响应速度。例如,当我们网站的数据同步在两台web服务器上时,一台是电信服务器,一台是网通服务器,那么我们肯定希望全国访问我们网站的用户在打开网站的时候,能够自动实现,电信用户访问电信服务器,网通用户访问网通服务器。配置这种情况的前提是,web服务器必须要有一个电信的IP地址和一个网通的IP地址。DNS服务器的这种解析功能通常也被称之为智能解析。

        DNS服务器的视图通常在配置文件中是使用view实现的。把要使用某些IP地址作单独访问的zone区域,统一放在一个命名的view段落中,并且在view中定义请求的IP地址或IP地址段,把IP地址写入match-clients选项中。如果像上面说的,区分电信和网通路线的话,那么可以使用两个acl访问控制列表写上电信或网通IP地址,定义电信网通路线,把acl名字写入view段落match-clients选项中。如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
acl telecomip{ tele_IP; ... };
acl netcomip{ net_IP; ... };
view telecom {
match-clients { telecomip; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.telecom";
};
};
view netcom {
match-clients { netcomip; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.netcom";
};
};
view default {
match-clients { any; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.netcom";
};
};

        需要注意的是:

  • 如果使用了视图的功能,那么配置文件中的所有zone区域都要必须写在视图里面,如,配置文件里默认要配置的三个区域,根、127.0.0.1、1.0.0.127.in-addr.arpa都要写入视图。
  • 在acl中定义IP地址,IP地址的写法可以是单个IP地址也可以是一个IP地址段加掩码,如:192.168.0.0/24。
  • 视图是根据配置文件从上往下匹配的,所以希望优先访问的资源记录文件,区域应该尽量写前面。
  • 如果定义的若干个视图的IP地址不全的话,那么可以在最后定义一个默认视图,match-clients选项中的IP地址写上any,代表如果此次访问的IP地址上面没有一个能匹配到,则在此处归类。

        实例:虚拟两台IP地址不同的主机,实现DNS服务器视图功能。

  1. 本地电脑只有一个IP地址段,故使用两个IP地址分别代表两个不同的路线。首先,我们配置一个区域wubinary.com的DNS服务器,ip地址为,192.168.0.6。打开/etc/named.rfc1912.zones文件,编辑如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
acl net { 192.168.0.6; };
acl local { 192.168.0.12; };
view netcom {
match-clients { net; };
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "wubinary.com" IN {
type master;
file "wubinary.com.net";
};
};
view localcom {
match-clients { local; };
zone "wubinary.com" IN {
type master;
file "wubinary.com.local";
};
};
view default {
match-clients { any; };
zone "wubinary.com" IN {
type master;
file "wubinary.com.local";
};
};

        说明:我们分别定义两个acl,用于代表两个不同路线,IP地址为192.168.0.6的机器访问的资源记录文件是 wubinary.com.net文件,IP地址为192.168.0.12和其它的机器则访问wubinary.com.local这个文件的资源记录文件。

  1. 分别编辑这两个文件

        编辑文件/var/named/wubinary.com.net

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/01.jpeg?raw=true)

        编辑文件/var/named/wubinary.com.local

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/02.jpeg?raw=true)

        这里IP地址分别改了,192.168.0.6的机器请求时对应解析的IP是192.168开头的,192.168.0.12请求时对应解析的IP是172.16开头的。配置完成后,记得修改文件所属组及文件权限。

  1. 测试一下配置文件语法。

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/03.jpeg?raw=true)

  1. 好的,重新载入配置文件,在分别在两台机器上测试一下吧。

        重载配置文件:

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/04.jpeg?raw=true)

        192.168.0.6的机器,也就是我们DNS所属的这台机器,结果如下:

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/05.jpeg?raw=true)

        192.168.0.12的机器,结果如下:

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/06.jpeg?raw=true)

        两台机器请求DNS服务器时域名解析达到了预期的效果,测试成功。

二、bind中rndc的使用

        rndc是Remote Name Domain Controllerr的简写,它是一个远程管理bind的工具。在使用rndc管理bind前需要使用rndc生成一对密钥文件,一半保存于rndc的配置文件中,另一半保存于bind主配置文件中。rndc的配置文件为/etc/rndc.conf,在CentOS或者RHEL中,rndc的密钥保存在/etc/rndc.key文件中。rndc默认监听在953号端口,其实在bind9中rndc默认就是可以使用可,不需要配置密钥文件。

        rndc常用命令:

1
2
3
4
5
6
7
8
9
status #查看DNS状态
reload #重新加载配置文件
reload zone_name #重新加载指定区域
reconfig #重读配置文件并加载新增的区域
querylog #关闭或开启查询日志
flush #清空服务器的缓存
flushname name #清空指定名称相关的缓存
trace #打开debug, debug有级别的概念,每执行一次提升一次级别
trace LEVEL #指定 debug 的级别, trace 0 表示关闭debug

        使用rndc:

  1. 生成密钥文件

        命令:

1
rndc-confgen > /etc/rndc.conf

        或者

1
rndc-confgen -r /dev/urandom > /etc/rndc.conf

        生成的配置文件如下:

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/07.jpeg?raw=true)

  1. 复制上面配置文件中下面一块被注释的区域至/etc/named.conf文件中,并把注释关闭。

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/08.jpeg?raw=true)

  1. 重新加载bind后就可以使用rndc管理bind了。

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/09.jpeg?raw=true)

  1. 使用rndc重新加载bind的配置文件。

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/10.jpeg?raw=true)

        注意:如果在使用rndc时,出现如上警告时,可以删除/etc/rndc.key文件,或者重命名该文件。

  1. DNS服务器的debug功能默认是关闭的,使用rndc trace可以开启该功能,执行一次该命令 debug 级别加一级,也可以在命令后面加一个数字作为参数,指定debug级别,当数字为0时,表示关闭debug功能。

        开启debug:

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/11.jpeg?raw=true)

        关闭debug:

%EF%BC%9ADNS%E8%A7%86%E5%9B%BE%E5%8F%8Abind%E4%B8%ADrndc%E7%9A%84%E4%BD%BF%E7%94%A8/12.jpeg?raw=true)